import { isEmpty } from './index'

/**
 * 通过名称获取 字典详情列表
 * @param {string} name
 */
/* 时间转化 */
export function formatDate (date = new Date(), fmt = 'yyyy-MM-dd HH:mm:ss') {
  var o = {
    'M+': date.getMonth() + 1, // 月份
    'd+': date.getDate(), // 日
    'H+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    S: date.getMilliseconds() // 毫秒
  }
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(
      RegExp.$1,
      (date.getFullYear() + '').substr(4 - RegExp.$1.length)
    )
  }
  for (var k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
      )
    }
  }
  return fmt
}

/**
 * 通过时间查出当前周的起始时间
 */
export function getWeek (date) {
  const nowDayOfWeek = date.getDay() // 今天本周的第几天
  const nowDay = date.getDate() // 当前日
  // const nowMonth = date.getMonth() + 1 // 当前月
  // 上面的是下一个月的，这个才是当前月
  const nowMonth = date.getMonth()
  const nowYear = date.getFullYear()
  const weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek)
  const weekEndDate = new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek))
  return [
    formatDate(weekStartDate, 'yyyy-MM-dd'),
    formatDate(weekEndDate, 'yyyy-MM-dd')
  ]
}

/**
 * 增减天数
 */
export function addDate (date, days, type) {
  if (isEmpty(days)) {
    days = 1
  }
  let currDate = date.replace(/-/g, '/')

  // 兼容IE, new Date() 不支持年月
  if (currDate.indexOf('/') !== -1 && currDate.split('/').length === 2) {
    currDate = currDate + '/1'
  }
  var newdate = new Date(currDate)
  if (type === 0) {
    newdate.setDate(newdate.getDate() - days)
  } else {
    newdate.setDate(newdate.getDate() + days)
  }
  // newdate = new Date(newdate)
  // var m = newdate.getMonth() + 1
  // var d = newdate.getDate()
  return formatDate(newdate, 'yyyy-MM-dd')
  // return newdate.getFullYear() + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d)
}

function zeroize (num) {
  return (String(num).length === 1 ? '0' : '') + num
}

/**
 * 更友好时间格式化
 */
export function friendTimeFormat (timeStr) {
  var timestamp = Date.parse(timeStr.replace(/-/g, '/')) / 1000
  var curTimestamp = new Date().getTime() / 1000 // 当前时间戳
  var timestampDiff = curTimestamp - timestamp // 参数时间戳与当前时间戳相差秒数

  var curDate = new Date(curTimestamp * 1000) // 当前时间日期对象
  var tmDate = new Date(timestamp * 1000)  // 参数时间戳转换成的日期对象

  let Y = tmDate.getFullYear()
  let m = tmDate.getMonth() + 1
  let d = tmDate.getDate()
  let H = tmDate.getHours()
  let i = tmDate.getMinutes()
  // let s = tmDate.getSeconds()

  if (timestampDiff < 60) { // 一分钟以内
    return '刚刚'
  } else if (timestampDiff < 3600) { // 一小时前之内
    return Math.floor(timestampDiff / 60) + '分钟前'
  } else if (curDate.getFullYear() === Y && curDate.getMonth() + 1 === m && curDate.getDate() === d) {
    return '今天 ' + zeroize(H) + ':' + zeroize(i)
  } else {
    var newDate = new Date((curTimestamp - 86400) * 1000) // 参数中的时间戳加一天转换成的日期对象
    if (newDate.getFullYear() === Y && newDate.getMonth() + 1 === m && newDate.getDate() === d) {
      return '昨天 ' + zeroize(H) + ':' + zeroize(i)
    } else if (curDate.getFullYear() === Y) {
      return zeroize(m) + '月' + zeroize(d) + '日 ' + zeroize(H) + ':' + zeroize(i)
    } else {
      return Y + '年' + zeroize(m) + '月' + zeroize(d) + '日 ' + zeroize(H) + ':' + zeroize(i)
    }
  }
}


